home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / bbs / dlmst251.zip / FMSCHK.C < prev    next >
Text File  |  1992-06-29  |  6KB  |  176 lines

  1. /****************************************************************
  2. *  FMSCHK version 1.04 - check RBBS FMS directory structure     *
  3. *  compiled with Turbo-C version 2.01 using Tiny memory model   *
  4. *  Copyright (c) 1991-1992 by Bob Hampton                       *
  5. *  S3-Tech BBS (703) 451-9509                                   *
  6. *  all rights reserved                                          *
  7. ****************************************************************/
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <dir.h>
  13. #include <ctype.h>
  14.  
  15. #define FALSE 0
  16. #define TRUE !FALSE
  17. #define MAXLINE 161        /* maximum length of FMS file line */
  18.  
  19. void fail (int linenumber, char *message, char *buffer);
  20.  
  21. int main (int argc, char **argv)
  22. {
  23.     char fmsname[MAXPATH],        /* FMS file to scan              */
  24.          buffer[MAXLINE],        /* buffer for file reading       */
  25.          *buffptr,                  /* work pointer for buffer       */
  26.          fnamebuff[14],             /* buffer for filename/ext parse */
  27.          fname[14],            /* file name                     */
  28.          fext[4],            /* file extension                */
  29.          *fsizeptr,                 /* pointer to file size          */
  30.          fsize[9],            /* file size                     */
  31.          fdate[9];            /* file date                     */
  32.     FILE *fmsfile;            /* pointer to FMS file           */
  33.     int linelength,                 /* length of FMS line            */
  34.         linenumber = 0,             /* line number in FMS file       */
  35.         length_err,                 /* flag for error in line length */
  36.         name_err,                   /*  "    "    "   " filename/ext */
  37.         size_err,                   /*  "    "    "   "  filesize    */
  38.         date_err,                   /*  "    "    "   "  file date   */
  39.         extra_err,                  /*  "    "  extraneous character */
  40.         retval = 0,                 /* return value: 0 = success     */
  41.         i = 0;               /* work variable for indexing    */
  42.  
  43.     switch (argc)
  44.     {
  45.         case 2:
  46.             strcpy (fmsname, *(argv + 1));
  47.             break;
  48.         default:
  49.             fprintf (stderr, "\nInvalid command line\n\n");
  50.             fprintf (stderr, "Usage: FMSCHK <FMS filename>\n");
  51.             exit(1);
  52.     }
  53.  
  54.     puts ("FMSCHK version 1.04                  (c) 1990-92 by Bob Hampton\n");
  55.  
  56.     /**************
  57.     *  open file  *
  58.     **************/
  59.     if ((fmsfile = fopen (fmsname, "r")) == NULL)
  60.     {
  61.         printf ("Unable to open FMS file: %s\n", fmsname);
  62.         exit (1);
  63.     }
  64.  
  65.     /*********************************************
  66.     *  read first line of file, set linelength,  *
  67.     *  and seek to beginning of file             *
  68.     *********************************************/
  69.     fgets (buffer, MAXLINE, fmsfile);
  70.     linelength = strlen (buffer);
  71.     fseek (fmsfile, 0L, SEEK_SET);
  72.  
  73.     /*******************************
  74.     *  for each line in FMS file,  *
  75.     *******************************/
  76.     while (fgets (buffer, MAXLINE, fmsfile) != NULL)
  77.     {
  78.         /******************************
  79.         *  set error flags FALSE and  *
  80.         *  increment line number      *
  81.         ******************************/
  82.         length_err = FALSE;
  83.         name_err = FALSE;
  84.         size_err = FALSE;
  85.         date_err = FALSE;
  86.         extra_err = FALSE;
  87.         linenumber++;
  88.  
  89.         /*******************************
  90.         *  check for linelength error  *
  91.         *******************************/
  92.         if (strlen(buffer) != linelength)
  93.             length_err = TRUE;
  94.  
  95.         /*********************************
  96.         *  if line contains a filename,  *
  97.         *********************************/
  98.         if (strchr("\\ *", *buffer) == NULL)    /* if filename present:   */
  99.         {
  100.             /*****************************************
  101.             *  set pointer and check for extraneous  *
  102.             *  characters in specified places        *
  103.             *****************************************/
  104.             buffptr = buffer;
  105.             if (buffer[21] != ' ' || buffer[22] != ' ' || buffer[31] != ' ')
  106.                 extra_err = TRUE;
  107.  
  108.             /*********************************************
  109.             *  get name/ext into work buffer, and check  *
  110.             *  for name/ext error, or extra characters   *
  111.             *********************************************/
  112.             strncpy (fnamebuff, buffer, 13);
  113.             fnamebuff[13] = '\0';
  114.             strcpy (fname, strtok (fnamebuff, " ."));
  115.             strcpy (fext, strtok (NULL, " ."));
  116.             if (strlen(fname) > 8 || strlen(fext) > 3)
  117.                 name_err = TRUE;
  118.             if (strtok (NULL, " "))
  119.                 extra_err = TRUE;
  120.  
  121.             /********************************************
  122.             *  get filesize into buffer, strip leading  *
  123.             *  spaces, and check for filesize error     *
  124.             ********************************************/
  125.             buffptr += 13;
  126.             strncpy (fsize, buffptr, 8);
  127.             fsize[8] = '\0';
  128.             fsizeptr = fsize;
  129.             for (i = 0; *fsizeptr == ' ' && i < 7; fsizeptr++, i++);
  130.             while (*fsizeptr)
  131.                 if (isdigit (*fsizeptr++) == 0)
  132.                     size_err = TRUE;
  133.  
  134.             /**********************************
  135.             *  get file date into buffer and  *
  136.             *  check for format error         *
  137.             **********************************/
  138.             buffptr += 10;
  139.             for (i = 0; i < 9; i += 3)
  140.             {
  141.                 if ((isdigit (buffptr[i]) && isdigit (buffptr[i+1])) == 0)
  142.                     date_err = TRUE;
  143.                 if (i < 4 && buffptr[i+2] != '-')
  144.                     date_err = TRUE;
  145.             }
  146.         }
  147.  
  148.         /******************************************
  149.         *  check error flags and print any error  *
  150.         *  messages for this FMS line             *
  151.         ******************************************/
  152.         if (length_err || name_err || size_err || date_err || extra_err)
  153.         {
  154.             retval = -1;
  155.             printf ("ERROR in line #%d of %s:\n", linenumber, fmsname);
  156.             if (length_err)
  157.                 puts ("    error in line length");
  158.             if (name_err)
  159.                 puts ("    error in filename format");
  160.             if (size_err)
  161.                 puts ("    error in filesize format");
  162.             if (date_err)
  163.                 puts ("    error in date format");
  164.             if (extra_err)
  165.                 puts ("    extraneous characters in line");
  166.             puts (buffer);
  167.         }
  168.     }
  169.     if (retval == 0)
  170.         printf ("file %s checks okay.\n", strupr(fmsname));
  171.     exit (retval);
  172. }
  173.  
  174.  
  175.  
  176.